Intel Image Processing Library
Frequently Asked Questions
The Intel Image Processing Library maintains the latest errata on the Intel Developer web site. Please check the library errata for further information.
Will applications developed using the Intel Image Processing Library run on non-Intel processors?
What compiler environments does the Intel Image Processing Library support?
Where can I find assembly code samples that implement image processing routines using MMX technology?
What is the minimal installation for development using the Intel Image Processing Library?
What is the minimal installation for the use of the Intel Image Processing Library in an application?
Are there any wavelet transforms in the Intel Image Processing Library?
Is the library thread-safe?
It seems that I have to create separate versions of my executable for each processor, since I need to link with different libraries in each case. How do I create one application that works for all processors?
When I run the IPLIEDIT.EXE example program provided with the Intel Image Processing Library, the program requests IPLP4.DLL which is not present in the package or release notes.
The _iplmake.bat is missing from files I downloaded from your web site and I am having a hard time figuring out how to build userdll.c. Can you help?
When will the next release be available? What will it contain?
Rotate does not seem to operate as documented, particularly with ROI. What is wrong?
I want to use the Intel Image Processing Library to process video images that I am capturing in real time. Video images come in a DIB format, is there any way to avoid copying the image data when I convert the data into an Intel Image Processing Library image?
Will applications developed using the Intel Image Processing Library run on non-Intel processors?
Our libraries will run on any processor that is 100% compatible with the Intel Architecture.
What compiler environments does the Intel Image Processing Library support?
Please refer to the library release notes or the library web site for more detail.
Where can I find assembly code samples that implement image processing routines using MMX technology?
Please visit the Intel’s WWW site at http://developer.intel.com/drg/mmx/appnotes for sample code for several common operations.
What is the minimal installation for development using the Intel Image Processing Library?
To develop using the Intel Image Processing Library requires at minimum the static libraries and header files, or the DLLs, stubs, and header files. The former allows you to create the minimal installation (memory footprint) use of the library, described below.
What is the minimal installation for the use of the Intel Image Processing Library in an application?
The Intel Image Processing Library has the smallest installation footprint when the UserDLL feature is used.
If this is used, a DLL containing needed IPL functions (roughly 10-40KB/function/processor type), the
dispatcher DLL, and the CPUID32.DLL file are the only files that are required to be included with an application.
Are there any wavelet transforms in the Intel Image Processing Library?
Not yet. They are on the roadmap for future releases.
Is the library thread-safe?
The library has been tested to be thread safe, yes. However, there have been two bugs that relate to thread-safety, in the DCT and in the FFT. These functions are not thread-safe. Nor is thread-safety guaranteed with the static libraries, including UserDLL builds. This will be addressed in version 2.0.
It seems that I have to create separate versions of my executable for each processor, since I need to link with different libraries in each case. How do I create one application that works for all processors?
If you use only static libraries, you will have to create multiple executables, but this is not true if you use one of the following DLL methods:
1) Use our DLLs.
Link to ipl.lib, and you will include the stubs to the DLLs included with the DLL and complete packages. The stubs will automatically look for the correct DLL. The DLLs provided, IPLM5.DLL, IPLM6.DLL, IPLP6.DLL, IPLP5.DLL, and IPLPX.DLL, are each geared for a different processor. The DLL IPL.DLL will call CPUID32.DLL once at the beginning of execution to determine the type of host processor; any calls to IPL functions in IPL.DLL.dll will be then dispatched to the appropriate version.
2) Use the custom DLL builder, UserDLL.
If you are only using a few functions and do not want to ship the entire provided DLLs, there is also a mechanism to create DLLs that include your functions only. This is described in the User’s Notes and demonstrated under examples\userdll.ipl. This will create a set of smaller DLLs. For this, you need to be using Microsoft Visual C++* and the static libraries.
When I run the IPLIEDIT.EXE example program provided with the Intel Image Processing Library, the program requests IPLP4.DLL which is not present in the package or release notes.
This is an error with the beta versions. We no longer produce the file IPLP4.DLL. The file IPLPX.DLL, which is the C optimized version, should be called for 486 machines. This has been fixed in the release version.
The _iplmake.bat is missing from files I downloaded from your web site and I am having a hard time figuring out how to build userdll.c. Can you help?
There were a few mistakes in the beta userdll documentation and batch files. All but one, an extra NULL argument to iplCreateImageHeader in test.c, have been corrected in the release version.
When will the next release be available? What will it contain?
Watch for the beta IPL 2.0, 1998. Our plans is that it will contain support for a bit-mask region of interest, floating point pixels, new low level functions, and many new geometric functions, in addition to other filtering and color conversion operations.
Rotate does not seem to operate as documented, particularly with ROI. What is wrong?
There is a bug in rotate. The ROI doesn’t rotate with the image, so it acts just as an ROI in the destination. Unfortunately, this results in lost information. For example, rotating a 100x50 image with no ROI 90 deg. should fill a 50x100 image completely. As implemented, the function fills only 50x50 of the destination image. The workaround is to specify a source ROI that’s larger than the source image, in this case a source ROI of 50x100. The next version will have a different specification for rotate, as well as many more other geometric operations.
I want to use the Intel Image Processing Library to process video images that I am capturing in real time. Video images come in a DIB format, is there any way to avoid copying the image data when I convert the data into an Intel Image Processing Library image?
Yes, Intel Image Processing Library images are a superset of DIB and so you may use the data directly with one caveat: for efficiency, Intel Image Processing Library images should be 8 byte aligned. A simple scheme for getting 8 byte aligned data areas is as follows (for RGB images):
unsigned char Image[640*480*3 + 8]; //Allow 8 bytes slop for alignment
unsigned char *pI = Image + ((8 – (int)Image%8)%8); //Aligned image data pointer
//Make an IPL header for the above
int width = 640, height = 480;
IplImage IPL;
IPL.nSize = sizeof(IplImage);
IPL.nChannels = 3;
IPL.depth = IPL_DEPTH_8U;
IPL.colorModel[0] = 'R';
IPL.colorModel[1] = 'G';
IPL.colorModel[2] = 'B';
IPL.colorModel[3] = 0;
IPL.channelSeq[0] = 'B';
IPL.channelSeq[1] = 'G';
IPL.channelSeq[2] = 'R';
IPL.channelSeq[3] = 0;
IPL.dataOrder = IPL_DATA_ORDER_PIXEL;
IPL.origin = IPL_ORIGIN_BL;
IPL.align = IPL_ALIGN_QWORD;
IPL.height = height;
IPL.width = width;
IPL.roi = NULL;
IPL.tileInfo = NULL;
int twidth = width*3;
IPL.imageSize = height*twidth;
IPL.widthStep = twidth + ((8 - (twidth%8))%8);
IPL.imageData = pI;